// Shows how to write into multiple OPC items using a single method call, and read multiple item values back. using System; using System.Diagnostics; using OpcLabs.BaseLib.OperationModel; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.DataAccess.OperationModel; namespace DocExamples.DataAccess._EasyDAClient { partial class WriteMultipleItemValues { public static void Main1() { // Instantiate the client object. var client = new EasyDAClient(); Console.WriteLine("Writing multiple item values..."); OperationResult[] resultArray = client.WriteMultipleItemValues( new[] { new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 12345), new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_BOOL", true), new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_R4", 234.56) }); for (int i = 0; i < resultArray.Length; i++) { Debug.Assert(resultArray[i] != null); if (resultArray[i].Succeeded) Console.WriteLine($"Result {i}: success"); else { Debug.Assert(!(resultArray[i].Exception is null)); Console.WriteLine($"Result {i} *** Failure: {resultArray[i].ErrorMessageBrief}"); } } Console.WriteLine(); Console.WriteLine("Reading multiple item values..."); ValueResult[] valueResultArray = client.ReadMultipleItemValues("OPCLabs.KitServer.2", new DAItemDescriptor[] { "Simulation.Register_I4", "Simulation.Register_BOOL", "Simulation.Register_R4" }); for (int i = 0; i < valueResultArray.Length; i++) { Debug.Assert(valueResultArray[i] != null); Console.WriteLine($"valueResultArray[{i}]: {valueResultArray[i]}"); } // Example output: // //Writing multiple item values... //Result 0: success //Result 1: success //Result 2: success // //Reading multiple item values... //valueResultArray[0]: Success; 12345 {System.Int32} //valueResultArray[1]: Success; True {System.Boolean} //valueResultArray[2]: Success; 234.56 {System.Single} } } }
# Shows how to write into multiple OPC items using a single method call, and read multiple item values back. #requires -Version 5.1 using namespace OpcLabs.EasyOpc.DataAccess using namespace OpcLabs.EasyOpc.DataAccess.OperationModel # The path below assumes that the current directory is [ProductDir]/Examples-NET/PowerShell/Windows . Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassicCore.dll" Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassic.dll" Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassicComponents.dll" # Instantiate the client object. $client = New-Object EasyDAClient Write-Host "Writing multiple item values..." $resultArray = $client.WriteMultipleItemValues(@( (New-Object DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 12345)), (New-Object DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_BOOL", $true)), (New-Object DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_R4", 234.56)) )) for ($i = 0; $i -lt $resultArray.Length; $i++) { $result = $resultArray[$i] if ($result.Succeeded) { Write-Host "Result $($i): success" } else { Write-Host "Result $($i) *** Failure: $($result.ErrorMessageBrief)" } } Write-Host Write-Host "Reading multiple item values..." $valueResultArray = [IEasyDAClientExtension]::ReadMultipleItemValues($client, "OPCLabs.KitServer.2", @( (New-Object DAItemDescriptor("Simulation.Register_I4")), (New-Object DAItemDescriptor("Simulation.Register_BOOL")), (New-Object DAItemDescriptor("Simulation.Register_R4")) )) for ($i = 0; $i -lt $valueResultArray.Length; $i++) { $valueResult = $valueResultArray[$i] Write-Host "valueResultArray[$($i)]: $($valueResult)" } # Example output: # #Writing multiple item values... #Result 0: success #Result 1: success #Result 2: success # #Reading multiple item values... #valueResultArray[0]: Success; 12345 {System.Int32} #valueResultArray[1]: Success; True {System.Boolean} #valueResultArray[2]: Success; 234.56 {System.Single}
# Shows how to write into multiple OPC items using a single method call, and read multiple item values back. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc # Import .NET namespaces. from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.DataAccess.OperationModel import * from OpcLabs.EasyOpc.OperationModel import * # Instantiate the client object. client = EasyDAClient() print('Writing multiple item values...') operationResultArray = client.WriteMultipleItemValues([ DAItemValueArguments(ServerDescriptor('OPCLabs.KitServer.2'), DAItemDescriptor('Simulation.Register_I4'), 12345), DAItemValueArguments(ServerDescriptor('OPCLabs.KitServer.2'), DAItemDescriptor('Simulation.Register_BOOL'), True), DAItemValueArguments(ServerDescriptor('OPCLabs.KitServer.2'), DAItemDescriptor('Simulation.Register_R4'), 234.56), ]) for i, operationResult in enumerate(operationResultArray): assert operationResult is not None if operationResult.Succeeded: print('operationResultArray[', i, ']: success', sep='') else: assert operationResult.Exception is not None print('operationResultArray[', i, '] *** Failure: ', operationResult.ErrorMessageBrief, sep='') print('Reading multiple item values...') try: valueResultArray = IEasyDAClientExtension.ReadMultipleItemValues(client, ServerDescriptor('OPCLabs.KitServer.2'), [ DAItemDescriptor('Simulation.Register_I4'), DAItemDescriptor('Simulation.Register_BOOL'), DAItemDescriptor('Simulation.Register_R4'), ]) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) exit() for i, valueResult in enumerate(valueResultArray): assert valueResult is not None if valueResult.Succeeded: print('valueResultArray[', i, '].Value: ', valueResult.Value, sep='') else: assert valueResult.Exception is not None print('valueResultArray[', i, '] *** Failure: ', valueResult.ErrorMessageBrief, sep='') print('Finished.')
' This example shows how to write values into multiple items. Imports OpcLabs.BaseLib.OperationModel Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.DataAccess.OperationModel Namespace DataAccess._EasyDAClient Partial Friend Class WriteMultipleItemValues Public Shared Sub Main1() Dim client = New EasyDAClient() Dim argumentsArray = New DAItemValueArguments() { _ New DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 12345), _ New DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_BOOL", True), _ New DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_R4", 234.56) _ } Dim resultArray As OperationResult() = client.WriteMultipleItemValues(argumentsArray) For i = 0 To resultArray.Length - 1 Debug.Assert(resultArray(i) IsNot Nothing) If resultArray(i).Succeeded Then Console.WriteLine("Result {0}: success", i) Else Console.WriteLine("Result {0} *** Failure: {1}", i, resultArray(i).ErrorMessageBrief) End If Next i Console.WriteLine("Reading multiple item values...") Dim valueResultArray() As ValueResult = client.ReadMultipleItemValues("OPCLabs.KitServer.2", _ New DAItemDescriptor() { _ "Simulation.Register_I4", "Simulation.Register_BOOL", "Simulation.Register_R4"}) For i = 0 To valueResultArray.Length - 1 Debug.Assert(valueResultArray(i) IsNot Nothing) Console.WriteLine("valueResultArray[{0}]: {1}", i, valueResultArray(i)) Next i End Sub End Class End Namespace
// This example shows how to write values into 3 items at once. class procedure WriteMultipleItemValues.Main; var Arguments: OleVariant; Client: OpcLabs_EasyOpcClassic_TLB._EasyDAClient; I: Cardinal; ItemValueArguments1: _DAItemValueArguments; ItemValueArguments2: _DAItemValueArguments; ItemValueArguments3: _DAItemValueArguments; Results: OleVariant; OperationResult: _OperationResult; begin ItemValueArguments1 := CoDAItemValueArguments.Create; ItemValueArguments1.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; ItemValueArguments1.ItemDescriptor.ItemID := 'Simulation.Register_I4'; ItemValueArguments1.Value := 23456; ItemValueArguments2 := CoDAItemValueArguments.Create; ItemValueArguments2.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; ItemValueArguments2.ItemDescriptor.ItemID := 'Simulation.Register_R8'; ItemValueArguments2.Value := 2.34567890; ItemValueArguments3 := CoDAItemValueArguments.Create; ItemValueArguments3.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2'; ItemValueArguments3.ItemDescriptor.ItemID := 'Simulation.Register_BSTR'; ItemValueArguments3.Value := 'ABC'; Arguments := VarArrayCreate([0, 2], varVariant); Arguments[0] := ItemValueArguments1; Arguments[1] := ItemValueArguments2; Arguments[2] := ItemValueArguments3; // Instantiate the client object Client := CoEasyDAClient.Create; // Modify values of nodes TVarData(Results).VType := varArray or varVariant; TVarData(Results).VArray := PVarArray( Client.WriteMultipleItemValues(Arguments)); // Display results for I := VarArrayLowBound(Results, 1) to VarArrayHighBound(Results, 1) do begin OperationResult := IInterface(Results[I]) as _OperationResult; if OperationResult.Succeeded then WriteLn('Result ', I, ' success') else WriteLn('Result ', I, ' *** Failure: ', OperationResult.Exception.GetBaseException.Message); end; VarClear(Results); VarClear(Arguments); end;
// This example shows how to write values into 3 items at once. $ItemValueArguments1 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments"); $ItemValueArguments1->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemValueArguments1->ItemDescriptor->ItemID = "Simulation.Register_I4"; $ItemValueArguments1->Value = 23456; $ItemValueArguments2 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments"); $ItemValueArguments2->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemValueArguments2->ItemDescriptor->ItemID = "Simulation.Register_R8"; $ItemValueArguments2->Value = 2.34567890; $ItemValueArguments3 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments"); $ItemValueArguments3->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemValueArguments3->ItemDescriptor->ItemID = "Simulation.Register_BSTR"; $ItemValueArguments3->Value = "ABC"; $arguments[0] = $ItemValueArguments1; $arguments[1] = $ItemValueArguments2; $arguments[2] = $ItemValueArguments3; $Client = new COM("OpcLabs.EasyOpc.DataAccess.EasyDAClient"); $results = $Client->WriteMultipleItemValues($arguments); for ($i = 0; $i < count($results); $i++) { $OperationResult = $results[$i]; if ($OperationResult->Succeeded) printf("Result %d: success\n", $i); else printf("Result d: s\n", $i, $OperationResult->ErrorMessageBrief); }
// Shows how to write into multiple OPC items using a single method call, and itemValue multiple item values back. mle_outputtext.Text = "" // Instantiate the client object OLEObject client client = CREATE OLEObject client.ConnectToNewObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient") // Prepare arguments. OLEObject itemValueArguments1 itemValueArguments1 = CREATE OLEObject itemValueArguments1.ConnectToNewObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") itemValueArguments1.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" itemValueArguments1.ItemDescriptor.ItemID = "Simulation.Register_I4" itemValueArguments1.Value = 12345 OLEObject itemValueArguments2 itemValueArguments2 = CREATE OLEObject itemValueArguments2.ConnectToNewObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") itemValueArguments2.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" itemValueArguments2.ItemDescriptor.ItemID = "Simulation.Register_BOOL" itemValueArguments2.Value = TRUE OLEObject itemValueArguments3 itemValueArguments3 = CREATE OLEObject itemValueArguments3.ConnectToNewObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") itemValueArguments3.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" itemValueArguments3.ItemDescriptor.ItemID = "Simulation.Register_R4" itemValueArguments3.Value = 234.56 OLEObject itemValueArgumentsList itemValueArgumentsList = CREATE OLEObject itemValueArgumentsList.ConnectToNewObject("OpcLabs.BaseLib.Collections.ElasticVector") itemValueArgumentsList.Add(itemValueArguments1) itemValueArgumentsList.Add(itemValueArguments2) itemValueArgumentsList.Add(itemValueArguments3) // Modify value of nodes OLEObject operationResultList operationResultList = client.WriteItemValueList(itemValueArgumentsList) // Display results Int i FOR i = 0 TO operationResultList.Count - 1 OLEObject operationResult operationResult = operationResultList.Item[i] IF operationResult.Succeeded THEN mle_outputtext.Text = mle_outputtext.Text + "Result " + String(i) + ": success" + "~r~n" ELSE mle_outputtext.Text = mle_outputtext.Text + "Result " + String(i) + ": " + operationResult.Exception.GetBaseException().Message + "~r~n" END IF NEXT mle_outputtext.Text = mle_outputtext.Text + "~r~n" mle_outputtext.Text = mle_outputtext.Text + "Finished." + "~r~n"
Rem This example shows how to write values into 3 items at once. Private Sub WriteMultipleItemValues_Main_Command_Click() OutputText = "" Dim itemValueArguments1 As New DAItemValueArguments itemValueArguments1.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" itemValueArguments1.ItemDescriptor.itemId = "Simulation.Register_I4" itemValueArguments1.SetValue 23456 Dim itemValueArguments2 As New DAItemValueArguments itemValueArguments2.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" itemValueArguments2.ItemDescriptor.itemId = "Simulation.Register_R8" itemValueArguments2.SetValue 2.3456789 Dim itemValueArguments3 As New DAItemValueArguments itemValueArguments3.serverDescriptor.ServerClass = "OPCLabs.KitServer.2" itemValueArguments3.ItemDescriptor.itemId = "Simulation.Register_BSTR" itemValueArguments3.SetValue "ABC" Dim arguments(2) As Variant Set arguments(0) = itemValueArguments1 Set arguments(1) = itemValueArguments2 Set arguments(2) = itemValueArguments3 ' Instantiate the client object Dim client As New EasyDAClient ' Modify values of nodes Dim results() As Variant results = client.WriteMultipleItemValues(arguments) ' Display results Dim i: For i = LBound(results) To UBound(results) Dim operationResult As operationResult: Set operationResult = results(i) If operationResult.Succeeded Then OutputText = OutputText & "result " & i & " success" & vbCrLf Else OutputText = OutputText & "result " & i & " *** Failure: " & operationResult.ErrorMessageBrief & vbCrLf End If Next End Sub
Rem This example shows how to write values into 3 items at once. Option Explicit Dim ItemValueArguments1: Set ItemValueArguments1 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") ItemValueArguments1.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemValueArguments1.ItemDescriptor.ItemID = "Simulation.Register_I4" ItemValueArguments1.Value = 23456 Dim ItemValueArguments2: Set ItemValueArguments2 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") ItemValueArguments2.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemValueArguments2.ItemDescriptor.ItemID = "Simulation.Register_R8" ItemValueArguments2.Value = 2.34567890 Dim ItemValueArguments3: Set ItemValueArguments3 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") ItemValueArguments3.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemValueArguments3.ItemDescriptor.ItemID = "Simulation.Register_BSTR" ItemValueArguments3.Value = "ABC" Dim arguments(2) Set arguments(0) = ItemValueArguments1 Set arguments(1) = ItemValueArguments2 Set arguments(2) = ItemValueArguments3 Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient") Dim results: results = Client.WriteMultipleItemValues(arguments) Dim i: For i = LBound(results) To UBound(results) Dim OperationResult: Set OperationResult = results(i) If OperationResult.Succeeded Then WScript.Echo "Result " & i & ": success" Else WScript.Echo "Result " & i & ": " & OperationResult.Exception.GetBaseException.Message End If Next
// This example shows how to write values into 3 items at once, test for success of each write and display the exception // message in case of failure. using System; using System.Diagnostics; using OpcLabs.BaseLib.OperationModel; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.DataAccess.OperationModel; namespace DocExamples.DataAccess._EasyDAClient { partial class WriteMultipleItemValues { public static void TestSuccess() { // Instantiate the client object. var client = new EasyDAClient(); Console.WriteLine("Writing multiple item values..."); OperationResult[] resultArray = client.WriteMultipleItemValues( new[] { new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_I4", 23456), new DAItemValueArguments("", "OPCLabs.KitServer.2", "Simulation.Register_R8", "This string cannot be converted to VT_R8"), new DAItemValueArguments("", "OPCLabs.KitServer.2", "UnknownItem", "ABC") }); for (int i = 0; i < resultArray.Length; i++) { Debug.Assert(resultArray[i] != null); if (resultArray[i].Succeeded) Console.WriteLine("Result {0}: success", i); else { Debug.Assert(!(resultArray[i].Exception is null)); Console.WriteLine("Result {0} *** Failure: {1}", i, resultArray[i].ErrorMessageBrief); } } } // Example output: // //Writing multiple item values... //Result 0: success //Result 1 *** Failure: Type mismatch. [...] //Result 2 *** Failure: The item is no longer available in the server address space. [...] } }
// This example shows how to write values into 3 items at once, test for success of each write and display the exception // message in case of failure. $ItemValueArguments1 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments"); $ItemValueArguments1->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemValueArguments1->ItemDescriptor->ItemID = "Simulation.Register_I4"; $ItemValueArguments1->Value = 23456; $ItemValueArguments2 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments"); $ItemValueArguments2->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemValueArguments2->ItemDescriptor->ItemID = "Simulation.Register_R8"; $ItemValueArguments2->Value = "This string cannot be converted to VT_R8"; $ItemValueArguments3 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments"); $ItemValueArguments3->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2"; $ItemValueArguments3->ItemDescriptor->ItemID = "UnknownItem"; $ItemValueArguments3->Value = "ABC"; $arguments[0] = $ItemValueArguments1; $arguments[1] = $ItemValueArguments2; $arguments[2] = $ItemValueArguments3; $Client = new COM("OpcLabs.EasyOpc.DataAccess.EasyDAClient"); $results = $Client->WriteMultipleItemValues($arguments); for ($i = 0; $i < count($results); $i++) { $OperationResult = $results[$i]; if ($OperationResult->Succeeded) printf("Result %d: success\n", $i); else printf("Result d: s\n", $i, $OperationResult->ErrorMessageBrief); }
Rem This example shows how to write values into 3 items at once, test for success of each write and display the exception Rem message in case of failure. Option Explicit Dim ItemValueArguments1: Set ItemValueArguments1 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") ItemValueArguments1.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemValueArguments1.ItemDescriptor.ItemID = "Simulation.Register_I4" ItemValueArguments1.Value = 23456 Dim ItemValueArguments2: Set ItemValueArguments2 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") ItemValueArguments2.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemValueArguments2.ItemDescriptor.ItemID = "Simulation.Register_R8" ItemValueArguments2.Value = "This string cannot be converted to VT_R8" Dim ItemValueArguments3: Set ItemValueArguments3 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.DAItemValueArguments") ItemValueArguments3.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2" ItemValueArguments3.ItemDescriptor.ItemID = "UnknownItem" ItemValueArguments3.Value = "ABC" Dim arguments(2) Set arguments(0) = ItemValueArguments1 Set arguments(1) = ItemValueArguments2 Set arguments(2) = ItemValueArguments3 Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient") Dim results: results = Client.WriteMultipleItemValues(arguments) Dim i: For i = LBound(results) To UBound(results) Dim OperationResult: Set OperationResult = results(i) If OperationResult.Succeeded Then WScript.Echo "Result " & i & ": success" Else WScript.Echo "Result " & i & ": " & OperationResult.Exception.GetBaseException.Message End If Next
Copyright © 2004-2023 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base. Technical support: Online Forums, FAQ.